 package IHM;


import Modele.Pair;
import java.awt.*; 
import java.math.BigDecimal;
import java.util.ArrayList;
import javax.swing.*; 
import org.jfree.chart.*; 
import org.jfree.chart.plot.*; 
import org.jfree.data.category.DefaultCategoryDataset;
import org.jfree.data.xy.XYSeries;
import org.jfree.data.xy.XYSeriesCollection;
/**
 * Classe qui génère un graphique à partir de statistique founis
 * @author philippestepniewski
 */
public class Stats extends JPanel { 
  private JPanel pnl; 
/**
 * Constructeur qui contruit un graphique histogramme -déprécié
 * @param width
 * @param height
 * @param titre
 * @param histogramme
 */
  public Stats(int width,int height,String titre,int[] histogramme){
   
    pnl = new JPanel(new BorderLayout()); 
    this.add(pnl); 
    pnl.setPreferredSize(new Dimension(width, height));

    DefaultCategoryDataset dataset = new DefaultCategoryDataset(); 
    for(int i=0;i<histogramme.length;i++){
        dataset.addValue(histogramme[i],"Intervalles "+i,"i "+i);
  }
    
    
    
    JFreeChart barChart = ChartFactory.createBarChart3D(titre, "Intervalles",
      "Nb neurones", dataset, PlotOrientation.VERTICAL, false, true, false);
    ChartPanel cPanel = new ChartPanel(barChart); 
    pnl.add(cPanel);
   
  }

/**
 * Constructeur qui initialise un graphique histogramme pour kmeans
 * @param width largeur
 * @param height hauteur
 * @param titre titre du graphique
 * @param kmeans type d'affichage
 * @param histogramme données numérique pour l'histogramme
 */
  public Stats(int width,int height,String titre,String kmeans,double[] histogramme){

    pnl = new JPanel(new BorderLayout());
    this.add(pnl);
    pnl.setPreferredSize(new Dimension(width, height));
    
    DefaultCategoryDataset dataset = new DefaultCategoryDataset();
    double borneinf;
    double bornesup;
    double deca;
    int decimalPlace = 1;
    for(int i=0;i<histogramme.length;i++){
        deca=i*(2.0/(double)histogramme.length);
        borneinf=-1+deca;
        deca=(2.0/(double)histogramme.length)*(i+1);
        bornesup=-1+deca;
        
        
        BigDecimal bs = new BigDecimal(bornesup);
        BigDecimal bi = new BigDecimal(borneinf);
        bs = bs.setScale(decimalPlace,BigDecimal.ROUND_DOWN);
        bi = bi.setScale(decimalPlace,BigDecimal.ROUND_DOWN);
        //dataset.addValue(histogramme[i],"["+bi+";"+bs+"]","i"+(i+1));
        dataset.addValue(histogramme[i],"cluster "+(i+1),"cluster "+(i+1));
  }

    JFreeChart barChart = ChartFactory.createBarChart3D(titre, "",
      "Pourcentage", dataset, PlotOrientation.VERTICAL, false, true, false);
    ChartPanel cPanel = new ChartPanel(barChart);
    pnl.add(cPanel);
  }
  


  /**
   * constructeur qui affiche une courbe
   * @param width largeur
   * @param height hauteur
   * @param titre titre du graphiqe
   * @param courbe type d'affichage
   * @param erreur données numériques pour la courbe
   */
  public Stats(int width,int height,String titre,boolean courbe,ArrayList<Double> erreur){
        pnl = new JPanel(new BorderLayout()); 
        this.add(pnl);
        pnl.setPreferredSize(new Dimension(width, height));
      //declaration de 2 objets pour les courbes
        XYSeries courbe1 = new XYSeries(titre);

        int boucle=0;
        // boucle qui ajoute les points des courbes
        for(int i=0;i<erreur.size();i++){
                    courbe1.add(boucle,erreur.get(i));
                    boucle++;
        }

        // init de l’objet permettant de créer le graph
        XYSeriesCollection xyDataset = new XYSeriesCollection(courbe1);

        //ajout de la 2ème courbe du graph
        xyDataset.addSeries(courbe1);

        // init de l’objet graph
        JFreeChart Graph = ChartFactory.createXYLineChart
                                            (titre,  // Title
                                            null,           // X-Axis label
                                            null,           // Y-Axis label
                                            xyDataset,          // Dataset
                                           PlotOrientation.VERTICAL,         // Orientation
                                           false,               // Show legend
                                            false,              // Tools Tips
                                            false );

        //init de la couleur de fond du graphe
              Color gris = new Color(200,200,200);
              Graph.setBackgroundPaint(gris);

        ChartPanel cPanel = new ChartPanel(Graph);
        pnl.add(cPanel);
}

/**
   * constructeur qui affiche une courbe
   * @param width largeur
   * @param height hauteur
   * @param titre titre du graphiqe
   * @param courbe type d'affichage
   * @param erreur données numériques pour la courbe
   */
  public Stats(int width,int height,String titre,ArrayList<Pair<Integer, Double>> erreur,String Curric){
        pnl = new JPanel(new BorderLayout()); 
        this.add(pnl);
        pnl.setPreferredSize(new Dimension(width, height));
      //declaration de 2 objets pour les courbes
        XYSeries courbe1 = new XYSeries(titre);

        // boucle qui ajoute les points des courbes
        for(int i=0;i<erreur.size();i++){
                    courbe1.add(erreur.get(i).fst(),erreur.get(i).snd());
        }

        // init de l’objet permettant de créer le graph
        XYSeriesCollection xyDataset = new XYSeriesCollection(courbe1);

        //ajout de la 2ème courbe du graph
        xyDataset.addSeries(courbe1);

        // init de l’objet graph
        JFreeChart Graph = ChartFactory.createXYLineChart
                                            (titre,  // Title
                                            null,           // X-Axis label
                                            null,           // Y-Axis label
                                            xyDataset,          // Dataset
                                           PlotOrientation.VERTICAL,         // Orientation
                                           false,               // Show legend
                                            false,              // Tools Tips
                                            false );

        //init de la couleur de fond du graphe
              Color gris = new Color(200,200,200);
              Graph.setBackgroundPaint(gris);

        ChartPanel cPanel = new ChartPanel(Graph);
        pnl.add(cPanel);
}


  public Stats(int width,int height,String titre,boolean kmeans,boolean courbe,double[] histogramme){
        pnl = new JPanel(new BorderLayout());
        this.add(pnl);
        pnl.setPreferredSize(new Dimension(width, height));
      //declaration de 2 objets pour les courbes
        XYSeries courbe1 = new XYSeries(titre);

        int boucle=0;
        // boucle qui ajoute les points des courbes
        for(int i=0;i<histogramme.length;i++){
                    courbe1.add(boucle,histogramme[i]);
                    boucle++;
        }

        // init de l’objet permettant de créer le graph
        XYSeriesCollection xyDataset = new XYSeriesCollection(courbe1);

        //ajout de la 2ème courbe du graph
        xyDataset.addSeries(courbe1);

        // init de l’objet graph
        JFreeChart Graph = ChartFactory.createXYLineChart
                                            (titre,  // Title
                                            null,           // X-Axis label
                                            null,           // Y-Axis label
                                            xyDataset,          // Dataset
                                           PlotOrientation.VERTICAL,         // Orientation
                                           false,               // Show legend
                                            false,              // Tools Tips
                                            false );

        //init de la couleur de fond du graphe
              Color gris = new Color(200,200,200);
              Graph.setBackgroundPaint(gris);

        ChartPanel cPanel = new ChartPanel(Graph);
        pnl.add(cPanel);
}
 }
